#pragma once

#include <gofcl_gpio_pins.h>

// 获取给定GPIO的所有输入引脚的电平（对于输出引脚结果无意义），列于返回值的低16位。
static inline gpio_pins_s gpio_get_input_pins(gpio_qe gpio_q) {
	return gpio_rreg_istat_s(gpio_q);
}

// 获取给定GPIO的所有引脚的输出电平（对于输出引脚是设置的输出电平，
// 对于上下拉输入引脚是无输入时的默认电平，上拉为1下拉为0，对于其它引脚无意义）。
static inline gpio_pins_s gpio_get_output_pull_pins(gpio_qe gpio_q) {
	return gpio_rreg_octl_s(gpio_q);
}

// 设置给定GPIO的所有引脚的输出电平（对于输出引脚是设置的输出电平，
// 对于上下拉输入引脚是无输入时的默认电平，上拉为1下拉为0，对于其它引脚无意义）。
static inline void gpio_set_output_pull_pins(gpio_qe gpio_q, gpio_pins_s pins) {
	gpio_wreg_octl_s(gpio_q, pins);
}

// 将给定GPIO的若干位置0（列于参数中，16位分别对应16个引脚）。
// 对于输出引脚是输出低电平，对于上下拉输入引脚是设置下拉。
static inline void gpio_output_pull_low(gpio_qe gpio_q, gpio_pins_s pins) {
	gpio_wreg_bc_s(gpio_q, pins);
}
